package generation;

import javacc.Yaka;

/**
 * Class Constante
 * Permet de declarer et initialiser des constantes
 * @author nform
 *
 */
public class Constante {
	private static String nom;
	
	/**
	 * Sauvegarder le nom de la prochaine constante
	 * @param n
	 */
	public static void stockNom(String n){
		nom = new String(n);
	}

	/**
	 * Insere une constante dans le tabIdent en donnant sa valeur
	 * @param s
	 */
	public static void range(String s) {
		try {
			stockEntier(Integer.parseInt(s));
		} catch (NumberFormatException e) {
			if(s.equals("VRAI"))
				stockBooleen(-1);
			else if(s.equals("FAUX"))
				stockBooleen(0);
			else
				stockIdent(s);
		}
	}

	/**
	 * Insertion en cas de type ENTIER
	 * @param i
	 */
	public static void stockEntier(int i) {
		Ident ident = new IdConst("ENTIER",i+"");
		stockageGenerale(ident);
	}

	/**
	 * Insertion en cas de type BOOLEEN
	 * @param i
	 */
	public static void stockBooleen(int i) {
		Ident ident = new IdConst("BOOLEEN",i+"");
		stockageGenerale(ident);
	}

	/**
	 * Insertion en cas d'IDENT
	 * @param nomIdent
	 */
	public static void stockIdent(String nomIdent) {
		// Pour une constante, quand on affecte un ident, celui-ci est forcement lui-meme une constante, donc on peut copier directement a partir du tableau des idents
		stockageGenerale( new IdConst( (IdConst)Yaka.tabIdent.chercheIdent(nomIdent) ) );
	}
	
	/**
	 * Fin de l'insertion
	 * @param i
	 */
	public static void stockageGenerale(Ident i) {
		Yaka.tabIdent.rangeIdLoc(nom,i);
	}
	
	public static void main(String[] args) {
		Constante.stockNom("toto");
		Constante.range("3");
	}

}
